暑假都在弄这个,一开始以为是要弄一个通用的对表格进行分块和把内容全部识别,所以又分块又分行又把横线上的内容单独弄出来,后来说是对于已知的特定表格,所以最后都用python来写了,比较方便。在网上只找到一个比较巧妙的提取表格框架的方法,用横向和竖向的细长的条去腐蚀膨胀可以得到横线和竖线,拼在一起就是完整的表格框架,而且这样正好把一些小点和文字去除了。
这样的话因为有些线太细,就检测所有轮廓再加粗一次,上图为加粗后的表格框架和找到的表格块(这图有点问题。。。好的找不到了)。但这个方法有个问题就是表格位置必须比较正,如果倾斜角度较大则不行。所以要先对表格进行透视变换后摆正。这里使用的方法是用上图找到的表格框架,找到表格的四个顶点,再和其轮廓的外接矩形的四个顶点得到变换矩阵。这里还有个问题,就四个顶点和变换后的四个顶点必须是对应的,所以要对四个顶点进行排序,怎么对矩形的四个顶点进行排序,在网上也找到了一个比较好的方法,就是将得到的四个顶点先按照y坐标分成上下A、B两部分,再对A部分按x坐标从小到大排序,对B部分按x坐标降序排序,这样四个点就能按照顺时针排列了,对于没有定位标识的表格,只要表格不是倒着摆放或者过分倾斜都可以正确变换。然后还有一个问题就是这是用外接矩形作为变换后